home *** CD-ROM | disk | FTP | other *** search
/ Magnum One / Magnum One (Mid-American Digital) (Disc Manufacturing).iso / d12 / stevie.arc / OS2.C < prev    next >
Text File  |  1990-01-10  |  2KB  |  177 lines

  1. /*
  2.  * OS/2 System-dependent routines.
  3.  */
  4.  
  5. #include "stevie.h"
  6.  
  7. /* added for turbo c port 6-15-88 dlm */
  8.  
  9. #ifndef TURBO
  10. extern    far pascal DOSSLEEP();
  11. #endif
  12.  
  13. /*
  14.  * inchar() - get a character from the keyboard
  15.  */
  16. int
  17. inchar()
  18. {
  19.     int    c;
  20.  
  21.     flushbuf();        /* flush any pending output */
  22.  
  23.     c = getch();
  24.  
  25.     if (c == 0x1e)        /* control-^ */
  26.         return K_CGRAVE;
  27.     else
  28.           {
  29.           switch (c) {
  30.                 case 0x68: return K_HELP;
  31.         case 0x61: return K_UNDO;
  32.         case 0x52: return K_INSERT;
  33.         case 0x47: return K_HOME;
  34.         case 0x48: return K_UARROW;
  35.         case 0x50: return K_DARROW;
  36.         case 0x4b: return K_LARROW;
  37.         case 0x4d: return K_RARROW;
  38.         case 0x29: return K_CGRAVE;
  39.                 default:   return c;
  40.           }
  41.           }
  42. }
  43.  
  44. #define    BSIZE    2048
  45. static    char    outbuf[BSIZE];
  46. static    int    bpos = 0;
  47.  
  48. flushbuf()
  49. {
  50.     if (bpos != 0)
  51.         write(1, outbuf, bpos);
  52.     bpos = 0;
  53. }
  54.  
  55. /*
  56.  * Macro to output a character. Used within this file for speed.
  57.  */
  58. #define    outone(c)    outbuf[bpos++] = c; if (bpos >= BSIZE) flushbuf()
  59.  
  60. /*
  61.  * Function version for use outside this file.
  62.  */
  63. void
  64. outchar(c)
  65. register char    c;
  66. {
  67.     outbuf[bpos++] = c;
  68.     if (bpos >= BSIZE)
  69.         flushbuf();
  70. }
  71.  
  72. void
  73. outstr(s)
  74. register char    *s;
  75. {
  76.     while (*s) {
  77.         outone(*s++);
  78.     }
  79. }
  80.  
  81. void
  82. beep()
  83. {
  84.     outone('\007');
  85. }
  86.  
  87. /* added for turbo c port 6-14-88 dlm */
  88.  
  89. #ifdef TURBO
  90.  
  91. msleep(n)
  92. unsigned int    n;
  93. {
  94.        sleep(60 * n);
  95. }
  96.  
  97. #else  /* not turbo compile */
  98.  
  99. sleep(n)
  100. int n;
  101. {
  102.  
  103.     DOSSLEEP(1000L * n);
  104. }
  105.  
  106. #endif
  107.  
  108. #ifdef TURBO
  109. void
  110. mdelay()
  111. {
  112.     delay(500U);
  113. }
  114.  
  115. #else   /* not turbo compile */
  116.  
  117. void
  118. delay()
  119. {
  120.         DOSSLEEP(500L);
  121.  
  122. }
  123.  
  124. #endif
  125.  
  126. void
  127. windinit()
  128. {
  129.     Columns = 80;
  130.     P(P_LI) = Rows = 25;
  131. }
  132.  
  133. void
  134. windexit(r)
  135. int r;
  136. {
  137.     flushbuf();
  138.     exit(r);
  139. }
  140.  
  141. void
  142. windgoto(r, c)
  143. register int    r, c;
  144. {
  145.     r += 1;
  146.     c += 1;
  147.  
  148.     /*
  149.      * Check for overflow once, to save time.
  150.      */
  151.     if (bpos + 8 >= BSIZE)
  152.         flushbuf();
  153.  
  154.     outbuf[bpos++] = '\033';
  155.     outbuf[bpos++] = '[';
  156.     if (r >= 10)
  157.         outbuf[bpos++] = r/10 + '0';
  158.     outbuf[bpos++] = r%10 + '0';
  159.     outbuf[bpos++] = ';';
  160.     if (c >= 10)
  161.         outbuf[bpos++] = c/10 + '0';
  162.     outbuf[bpos++] = c%10 + '0';
  163.     outbuf[bpos++] = 'H';
  164. }
  165.  
  166. FILE *
  167. fopenb(fname, mode)
  168. char    *fname;
  169. char    *mode;
  170. {
  171.     FILE    *fopen();
  172.     char    modestr[16];
  173.  
  174.     sprintf(modestr, "%sb", mode);
  175.     return fopen(fname, modestr);
  176. }
  177.